www.gusucode.com > VC 3D弹道仿真程序源码文件-源码程序 > VC 3D弹道仿真程序源码文件-源码程序/code/EarthModel.cpp
//Download by http://www.NewXing.com #include "stdafx.h" #include "EarthModel.h" #include <math.h> ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CEarth::CEarth() { Re = 6371000.0; //地球平均半径(球形) afa_e = 1/298.257; //地球扁率 ae = 6378140.0; //地球赤道半径,长轴半径 be = ae*(1.0-afa_e); //地球赤道半径,短轴半径 we = 0.00007292115; //地球自转角速度/rad } CEarth::~CEarth() { } /* 计算发射点地理纬度与地心纬度之差 函数*/ double CEarth::Cal_mu0(double B0, double phi0) { double mu0 ; mu0 = B0 - phi0 ; return mu0 ; } /* 由发射点地理纬度计算发射点地心纬度 函数*/ double CEarth::Cal_phi0(double B0) { double k, phi0 ; k = (be/ae)*(be/ae) ; phi0 = atan( k * tan(B0) ) ; return phi0; } /* 由计算得到的弹道地心纬度求对应的地理纬度 函数*/ double CEarth::Cal_B( double phi) // phi 为弧度 求出的B也为弧度 { double k, B; k = (ae/be)*(ae/be) ; B = atan( k * tan(phi) ) ; return B ; } void CEarth::CalEarthParams( ) { } /* 计算发射点处的地球半径 函数*/ double CEarth::Cal_R0( double B0 ) { double R0, phi0 ; phi0 = Cal_phi0( B0 ) ; R0 = ae*be/sqrt(ae*ae*sin(phi0)*sin(phi0)+be*be*cos(phi0)*cos(phi0)) ; return R0 ; } /* 计算弹道上任一点对应的的地球半径 函数*/ double CEarth::Cal_R( double phi ) { double R ; R = ae*be/sqrt(ae*ae*sin(phi)*sin(phi)+be*be*cos(phi)*cos(phi)) ; return R ; } /*计算发射点处的地球半径,在发射坐标系下的投影 函数*/ void CEarth::Cal_R0_xyz( double B0, double A0, double& R0x, double& R0y, double& R0z ) //发射点处的地球半径,在发射坐标系下的投影 { double R0, phi0 ; R0 = Cal_R0( B0 ) ; phi0 = Cal_phi0( B0 ) ; R0x = -R0 * sin(B0-phi0) * cos(A0); R0y = R0 * cos(B0-phi0); R0z = R0 * sin(B0-phi0) * sin(A0); //该程序中这三个值为定值 return ; } /*计算发射点处的地球自转角速度,在发射坐标系下的投影 函数*/ void CEarth::Cal_we_xyz( double B0, double A0, double& we_x, double& we_y, double& we_z ) //发射点处的地球半径,在发射坐标系下的投影 { we_x = we*cos(B0)*cos(A0); we_y = we*sin(B0) ; we_z = -we*cos(B0)*sin(A0) ; //该程序中这三个值为定值 return ; }